package com.tju.ocean_ecology_website.service;

import com.tju.ocean_ecology_website.entity.TeamMember;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

import java.util.List;

/**
 * 团队成员表(TeamMember)表服务接口
 *
 * @author shaolong
 * @since 2025-04-29 19:34:20
 */
public interface TeamMemberService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    TeamMember queryById(Long id);

    /**
     * 分页查询
     *
     * @param teamMember 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    Page<TeamMember> queryByPage(TeamMember teamMember, PageRequest pageRequest);

    /**
     * 新增数据
     *
     * @param teamMember 实例对象
     * @return 实例对象
     */
    TeamMember insert(TeamMember teamMember);

    /**
     * 修改数据
     *
     * @param teamMember 实例对象
     * @return 实例对象
     */
    TeamMember update(TeamMember teamMember);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Long id);

    /**
     * 审核通过成员
     *
     * @param id 成员ID
     * @return 实例对象
     */
    TeamMember approveMember(Long id);

    /**
     * 拒绝成员申请
     *
     * @param id 成员ID
     * @param reason 拒绝原因
     * @return 实例对象
     */
    TeamMember rejectMember(Long id, String reason);

    /**
     * 发送邀请
     *
     * @param teamId 团队ID
     * @param email 邮箱
     * @param role 角色
     * @param message 邀请消息
     * @return 邀请码
     */
    String sendInvitation(Long teamId, String email, Integer role, String message);

    /**
     * 获取邀请链接
     *
     * @param teamId 团队ID
     * @return 邀请链接
     */
    String getInviteLink(Long teamId);

    /**
     * 导出成员信息
     *
     * @param teamMember 查询条件
     * @return 成员列表
     */
    List<TeamMember> exportMembers(TeamMember teamMember);

    /**
     * 通过邀请码查询成员
     *
     * @param inviteCode 邀请码
     * @return 成员对象
     */
    TeamMember queryByInviteCode(String inviteCode);

    /**
     * 根据团队和用户查询成员
     *
     * @param teamId 团队ID
     * @param userId 用户ID
     * @return 成员对象
     */
    TeamMember queryByTeamAndUser(Long teamId, Long userId);

    /**
     * 统计符合条件的数据数量
     *
     * @param teamMember 查询条件
     * @return 数据数量
     */
    long count(TeamMember teamMember);
}
